const User = require('../models/userModel')
const { generateToken } = require('../utils/jwt')

const register = async (req, res) => {
  try {
    const { username, password } = req.body

    // 验证用户名和密码
    if (!username || !password) {
      return res.status(400).json({ message: '用户名和密码不能为空' })
    }

    if (username.length < 3 || username.length > 20) {
      return res.status(400).json({ message: '用户名长度必须在 3-20 个字符之间' })
    }

    if (password.length < 6) {
      return res.status(400).json({ message: '密码长度不能小于 6 个字符' })
    }

    // 检查用户是否已存在
    const existingUser = await User.findByUsername(username)
    if (existingUser) {
      return res.status(400).json({ message: '用户名已存在' })
    }

    // 创建新用户
    const userId = await User.create(username, password)
    const token = generateToken(userId)

    res.cookie('auth', token, {
      httpOnly: true,
      maxAge: 24 * 60 * 60 * 1000 // 24小时
    })

    res.status(201).json({
      message: '注册成功',
      user: { id: userId, username }
    })
  } catch (error) {
    console.error('注册失败:', error)
    res.status(500).json({ message: '注册失败' })
  }
}

const login = async (req, res) => {
  try {
    const { username, password } = req.body

    // 查找用户
    const user = await User.findByUsername(username)
    if (!user) {
      return res.status(401).json({ message: '用户名或密码错误' })
    }

    // 验证密码
    const isValid = await User.verifyPassword(password, user.password)
    if (!isValid) {
      return res.status(401).json({ message: '用户名或密码错误' })
    }

    // 生成 token
    const token = generateToken(user.id)

    res.cookie('auth', token, {
      httpOnly: true,
      maxAge: 24 * 60 * 60 * 1000 // 24小时
    })

    res.json({
      message: '登录成功',
      user: { id: user.id, username: user.username }
    })
  } catch (error) {
    console.error('登录失败:', error)
    res.status(500).json({ message: '登录失败' })
  }
}

const logout = (req, res) => {
  res.clearCookie('auth')
  res.json({ message: '退出成功' })
}

module.exports = {
  register,
  login,
  logout
} 